package com.quanyan.weichat.common;

import java.io.InputStream;

/**
 * User: rizenguo
 * Date: 2014/10/29
 * Time: 14:40
 * 这里放置各种配置数据
 */
public class Configure {
    //这个就是自己要保管好的私有Key了（切记只能放在自己的后台代码里，不能放在任何可能被看到源代码的客户端程序中）
    // 每次自己Post数据给API的时候都要用这个key来对所有字段进行签名，生成的签名会放在Sign这个字段，API收到Post数据的时候也会用同样的签名算法对Post过来的数据进行签名和验证
    // 收到API的返回的时候也要用这个key来对返回的数据算下签名，跟API的Sign数据进行比较，如果值不一致，有可能数据被第三方给篡改
    private String key;

    //微信分配的公众号ID（开通公众号之后可以获取到）
    private String appID;

    private String securityKey;

    //微信支付分配的商户号ID（开通公众号的微信支付功能之后可以获取到）
    private String mchID;

    //受理模式下给子商户分配的子商户号
    private String subMchID;

    //HTTPS证书
    private InputStream certData;

    //HTTPS证书密码，默认密码等于商户号MCHID
    private String certPassword;

    //机器IP
    private String ip = "";

    //notify URL .微信异步通知URL
    private String notify_url;

    public Configure(Builder builder) {
        this.key = builder.key;
        this.appID = builder.appID;
        this.securityKey = builder.securityKey;
        this.mchID = builder.mchID;
        this.subMchID = builder.subMchID;
        this.certData = builder.certData;
        this.certPassword = builder.certPassword;
        this.ip = builder.ip == null ? "" : builder.ip;
        this.notify_url = builder.NOTIFY_URL;
    }

    //是否使用异步线程的方式来上报API测速，默认为异步模式
    private static boolean useThreadToDoReport = true;

    //以下是几个API的路径：
    //1）被扫支付API
    public static String PAY_API = "https://api.mch.weixin.qq.com/pay/micropay";

    //2）被扫支付查询API
    public static String PAY_QUERY_API = "https://api.mch.weixin.qq.com/pay/orderquery";

    //3）退款API
    public static String REFUND_API = "https://api.mch.weixin.qq.com/secapi/pay/refund";

    //4）退款查询API
    public static String REFUND_QUERY_API = "https://api.mch.weixin.qq.com/pay/refundquery";

    //5）撤销API
    public static String REVERSE_API = "https://api.mch.weixin.qq.com/secapi/pay/reverse";

    //6）下载对账单API
    public static String DOWNLOAD_BILL_API = "https://api.mch.weixin.qq.com/pay/downloadbill";

    //7) 统计上报API
    public static String REPORT_API = "https://api.mch.weixin.qq.com/payitil/report";

    //8) 企业付款API （转账）
    public static String TRANSFER_API = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

    public static String HttpsRequestClassName = "com.quncao.transfer.pay.weichat.common.HttpsRequest";

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getAppID() {
        return appID;
    }

    public void setAppID(String appID) {
        this.appID = appID;
    }

    public String getSecurityKey() {
        return securityKey;
    }

    public void setSecurityKey(String securityKey) {
        this.securityKey = securityKey;
    }

    public String getMchID() {
        return mchID;
    }

    public void setMchID(String mchID) {
        this.mchID = mchID;
    }

    public String getSubMchID() {
        return subMchID;
    }

    public void setSubMchID(String subMchID) {
        this.subMchID = subMchID;
    }

    public InputStream getCertData() {
        return certData;
    }

    public void setCertData(InputStream certData) {
        this.certData = certData;
    }

    public String getCertPassword() {
        return certPassword;
    }

    public void setCertPassword(String certPassword) {
        this.certPassword = certPassword;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getNotify_url() {
        return notify_url;
    }

    public void setNotify_url(String notify_url) {
        this.notify_url = notify_url;
    }

    public static class Builder {
        private String key;
        //微信分配的公众号ID（开通公众号之后可以获取到）
        private String appID;
        private String securityKey;
        //微信支付分配的商户号ID（开通公众号的微信支付功能之后可以获取到）
        private String mchID;
        //受理模式下给子商户分配的子商户号
        private String subMchID;
        //HTTPS证书的本地路径
        private InputStream certData;
        //HTTPS证书密码，默认密码等于商户号MCHID
        private String certPassword;
        //机器IP
        private String ip = "";
        //notify URL .微信异步通知URL
        private String NOTIFY_URL;

        public Builder setKey(String key) {
            this.key = key;
            return this;
        }

        public Builder setAppID(String appID) {
            this.appID = appID;
            return this;
        }

        public Builder setSecurityKey(String securityKey) {
            this.securityKey = securityKey;
            return this;
        }

        public Builder setMchID(String mchID) {
            this.mchID = mchID;
            return this;
        }

        public Builder setSubMchID(String subMchID) {
            this.subMchID = subMchID;
            return this;
        }

        public Builder setCertData(InputStream certData) {
            this.certData = certData;
            return this;
        }

        public Builder setCertPassword(String certPassword) {
            this.certPassword = certPassword;
            return this;
        }

        public Builder setIp(String ip) {
            this.ip = ip;
            return this;
        }

        public Builder setNOTIFY_URL(String NOTIFY_URL) {
            this.NOTIFY_URL = NOTIFY_URL;
            return this;
        }

        public Configure build() {
            return new Configure(this);
        }
    }

    @Override
    public String toString() {
        return "{" +
                "\"key\":'" + key + '\'' +
                ", \"appID\":'" + appID + '\'' +
                ", \"securityKey\":'" + securityKey + '\'' +
                ", \"mchID\":'" + mchID + '\'' +
                ", \"subMchID\":'" + subMchID + '\'' +
                ", \"certData\":" + certData +
                ", \"certPassword\":'" + certPassword + '\'' +
                ", \"ip\":'" + ip + '\'' +
                ", \"notify_url\":'" + notify_url + '\'' +
                '}';
    }
}
